package rmq

import (
	"gitee.com/sdynasty/clever/clog"
)

// 定义接收者接口
type Receiver interface {
	Consumer([]byte)    error
}

/**
 * 消费消息  推模式
 */
func ConsumeMsgWork(user string, receiver Receiver) {
	channel, err := MQInstance().GetMQChannel()
	if err != nil {
		clog.LogLogic().Println(err)
		return
	}

	_, err = channel.QueueDeclare(
		// 队列名
		QueueName,
		//控制队列是否为持久的，当mq重启的时候不会丢失队列
		true,
		//是否为自动删除
		false,
		//是否具有排他性
		false,
		//是否阻塞
		false,
		//额外属性
		nil,)
	if err != nil {
		clog.LogLogic().Println(err)
		return
	}

	// 接收消息
	msgs, err := channel.Consume(
		QueueName,
		//用来区分多个消费者
		"",
		//是否自动应答(自动应答确认消息，这里设置为否，在下面手动应答确认)
		false,
		//是否具有排他性
		false,
		//如果设置为true，表示不能将同一个connection中发送的消息
		//传递给同一个connection的消费者
		false,
		//是否为阻塞
		false,
		nil,
		)
	if err != nil {
		clog.LogLogic().Println(err)
		return
	}

	//errChan := make(chan bool)
	go func() {
		for d := range msgs {
			e := d.Ack(false)
			if e != nil {
				clog.LogLogic().Println("接收队列消息 d.Ack error : ", e)
			}
			clog.LogLogic().Println("接收队列消息 user = " + user + ", :" + string(d.Body))
			_ = receiver.Consumer(d.Body)
		}
	}()
	//<- errChan
}